#ifndef MINDSPORE_INCLUDE_LLM_H_
#define MINDSPORE_INCLUDE_LLM_H_
#include "api/status.h"
#include "llm_config.h"
#include <memory>
#include <string>
#include <vector>

namespace mindspore {
class LLMImpl;
class MS_API LLM {
public:
    LLM();
    ~LLM();

    LLM(const LLM &) = delete;
    LLM &operator=(const LLM &) = delete;

    /// \brief Build model
    ///
    /// \param[in] cfg Define model config info.
    ///
    /// \return Status. 0: success, else: fail
    int Build(const LLMConfig &cfg);

    /// \brief generate prefill tokens
    ///
    /// \param[in] input_ids Define input token indexes
    /// \param[out] output_ids Define output token indexes
    ///
    /// \return Status. 0: success, else: fail
    int Generate(const std::vector<int> &input_ids, int *output_ids, bool is_prefill);

private:
    std::shared_ptr<LLMImpl> impl_;
};
} // namespace mindspore
#endif // MINDSPORE_INCLUDE_LLM_H_
